const { dictItemFind } = require('../api/index');

//  字典项集合
const dictObj = {}; //  记录 缓存字典项集合

async function setDict(type) {
  if(typeof type === 'string') { // 基础款
    dictObj[ type ] = [];
    const { errors = [], result } = await dictItemFind({ dictName: type });
    if(errors.length == 0) {
      dictObj[ type ] = result;
    }
  } else {  //  升级款
    dictObj[ type.dictName ] = [];
    const { errors = [], result } = await dictItemFind( type );
    if(errors.length == 0) {
      dictObj[ type.dictName ] = result;
    }
  }
} 

exports.setDict = setDict;

async function getDict( type ) {
  //  判断数据是否已经存在了，不存在则进行重新请求

  if(typeof type === 'string') { // 基础款
    if(!dictObj[ type ] || (dictObj[ type ] && dictObj[ type ].length <= 0)) {
      await setDict(type);
      return dictObj[ type ];
    }
    return dictObj[ type ];
  } else {
    if(!dictObj[ type.dictName ] || (dictObj[ type.dictName ] && dictObj[ type.dictName ].length <= 0)) {
      await setDict(type);
      return dictObj[ type.dictName ];
    }
    return dictObj[ type.dictName ];
  }
  
}

exports.getDict = getDict;

//  批量加载字典项
exports.getBatchDict = ( obj = [] ) => {
  //  创建 异步加载队列集合
  const list = obj.map(item => {
    return getDict( item );
  }) || [];

  return Promise.all(list);
}
